package ec.linde.modulos.proyectos.servicio.impl;

import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import ec.linde.enumeraciones.Estado;
import ec.linde.modulos.dao.CronogramaPlanOperativoDao;
import ec.linde.modulos.dao.DetallePlanOperativoDao;
import ec.linde.modulos.dao.PlanOperativoDao;
import ec.linde.modulos.proyectos.servicio.ServicioPlanOperativo;
import ec.linde.persistencia.entidades.proyectos.CronogramaPlanOperativo;
import ec.linde.persistencia.entidades.proyectos.DetallePlanOperativo;
import ec.linde.persistencia.entidades.proyectos.PlanOperativo;

/**
 * TODO: Agregar descripcion
 * 
 * @FechaCreacion: 29/09/2014
 * @author: Alex Carrillo
 * @FechaModificacion: 29/09/2014
 * @author: Alex Carrillo
 * @version: 1.0
 */
@Stateless
public class ServicioPlanOperativoImpl implements ServicioPlanOperativo {

	@EJB
	private PlanOperativoDao planOperativoDao;
	@EJB
	private DetallePlanOperativoDao detallePlanOperativoDao;
	@EJB
	private CronogramaPlanOperativoDao cronogramaPlanOperativoDao;

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#guardar(ec.linde .persistencia.entidades.proyectos.ProdProyecto)
	 */
	@Override
	public void guardar(PlanOperativo planOperativo) {
		for (DetallePlanOperativo detallePlanOperativo : planOperativo.getListaDetallePlanOperativo()) {
			for (CronogramaPlanOperativo cronogramaPlanOperativo : detallePlanOperativo.getListaCronogramaPlanOperativo()) {
				cronogramaPlanOperativoDao.guardar(cronogramaPlanOperativo);
			}
			detallePlanOperativoDao.guardar(detallePlanOperativo);
		}
		planOperativoDao.guardar(planOperativo);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#eliminar(ec. linde.persistencia.entidades.proyectos.ProdProyecto)
	 */
	@Override
	public void eliminar(PlanOperativo planOperativo) {
		planOperativoDao.eliminar(planOperativo);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#buscarPorId(int)
	 */
	@Override
	public PlanOperativo buscarPorId(int proyId) {
		return planOperativoDao.buscarPorId(proyId);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto# obtenerListaPorPagina(int, int, java.lang.String, boolean, java.util.Map)
	 */
	@Override
	public List<PlanOperativo> obtenerListaPorPagina(int startIndex, int pageSize, String sortField, boolean sortOrder, Map<String, String> filters) {
		return planOperativoDao.obtenerListaPorPagina(startIndex, pageSize, sortField, sortOrder, filters);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#obtenerListaCombo (java.lang.String, boolean, java.util.Map)
	 */
	@Override
	public List<PlanOperativo> obtenerListaCombo(String sortField, boolean sortOrder, Map<String, String> filters) {
		return planOperativoDao.obtenerListaCombo(sortField, sortOrder, filters);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#contarPorCriterio (java.util.Map)
	 */
	@Override
	public int contarPorCriterio(Map<String, String> filters) {
		return planOperativoDao.contarPorCriterio(filters);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#cargarDetalle (int)
	 */
	@Override
	public PlanOperativo cargarDetalle(int proyId) {
		return planOperativoDao.cargarDetalle(proyId);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioPlanOperativo#obtenerPlanOperativoActivo(java.lang.Integer)
	 */
	@Override
	public PlanOperativo obtenerPlanOperativoActivo(Integer idProyecto) {
		return planOperativoDao.obtenerPlanOperativoActivo(idProyecto);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioPlanOperativo#cambiarEstado(int, ec.linde.enumeraciones.Estado)
	 */
	@Override
	public void cambiarEstado(int idPlanOperativo, Estado estado) {
		planOperativoDao.cambiarEstado(idPlanOperativo, estado);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioPlanOperativo#cambiarEstadoPlanOperativoAnteriores(ec.linde.persistencia.entidades.proyectos.
	 * PlanOperativo, ec.linde.enumeraciones.Estado)
	 */
	@Override
	public void cambiarEstadoPlanOperativoAnteriores(PlanOperativo planOperativo, Estado estado) {
		planOperativoDao.cambiarEstadoPlanOperativoAnteriores(planOperativo, estado);
	}

	@Override
	public PlanOperativo copiarPlanOperativo(PlanOperativo planOperativo) {

		planOperativo.setIdPlanOperativo(0);
		planOperativo.setVersion(planOperativo.getVersion() + 1);
		planOperativo.setEstado(Estado.ELABORADO);
		planOperativo.setFecha(new Date());

		for (DetallePlanOperativo detallePlanOperativo : planOperativo.getListaDetallePlanOperativo()) {
			for (CronogramaPlanOperativo cronogramaPlanOperativo : detallePlanOperativo.getListaCronogramaPlanOperativo()) {
				cronogramaPlanOperativo.setIdCronogramaPlanOperativo(0);
			}
			detallePlanOperativo.setIdDetallePlanOperativo(0);
		}

		return planOperativo;
	}

}
